#include <REGX52.H>
#include "OneWire.h"
#include "LCD1602.h"

#define DS18B20_SKIP_ROM 			0xCC
#define DS18B20_CONVERT_T 			0x44
#define DS18B20_READ_SCRATCHPAD 	0xBE

void DS18B20_ConvertT(void)	//转化温度
{//温度变换：初始化-->跳过ROM-->开始温度变换
	OneWire_Init();//初始化
	OneWire_SendByte(DS18B20_SKIP_ROM);//跳过ROM
	OneWire_SendByte(DS18B20_CONVERT_T);//温度变换
}

float DS18B20_ReadT(void)//温度读取
{//温度读取：初始化-->跳过ROM-->读暂存器-->连续的读操作
	
	unsigned char TLSB,TMSB;
	int temp;//16位数据
	float T;
	
	OneWire_Init();
	OneWire_SendByte(DS18B20_SKIP_ROM);
	OneWire_SendByte(DS18B20_READ_SCRATCHPAD);//读暂存器
	//一旦发送完指令，控制权交给 从机 
	
	TLSB = OneWire_ReceiveByte();	//读的Byte0,低8位数据
	TMSB = OneWire_ReceiveByte();	//读的Byte1,高8位数据
	//用LCD1602显示出来这16位二进制数(后四位是小数，再前边四位是整数部分)
	LCD_ShowBinNum(1,1,TMSB,8);
	LCD_ShowBinNum(1,9,TLSB,8);
	
	temp = (TMSB << 8) | TLSB;		//正好为int类型16位数据
	 
	/*温度存储格式整体左移了四位，数据扩大了16倍
	bit0是2的-4次幂，bit4才是2的0次幂 = 1
	*/
	T = temp/16.0;	//强制类型转换
	
	return T;
}







